package registnet.base.courseoffering;

import java.util.List;

import registnet.base.instructor.IInstructor;

/**
 * Defines an interface for course offering implementations.
 */
public interface ICourseOffering {

	/**
	 * Returns the code of the course associated with the course offering.
	 * @return the code of the course associated with the course offering
	 */
	public String getCourseCode();
	
	/**
	 * Sets the code of the course associated with the course offering.
	 * @param courseCode
	 */
	public void setCourseCode(String courseCode);
	
	/**
	 * Returns the name of the course offering.
	 * @return the name of the course offering
	 */
	public String getName();
	
	/**
	 * Sets the name of the course offering.
	 * @param name
	 */
	public void setName(String name);
	
	/**
	 * Returns the academic year for which the course offering was offered.
	 * @return the academic year for which the course offering was offered
	 */
	public int getAcademicYear();
	
	/**
	 * Sets the academic year for which the course offering was offered.
	 * @param academicYear
	 */
	public void setAcademicYear(int academicYear);
	
	/**
	 * Returns the semester for which the course offering was offered.
	 * @return the semester for which the course offering was offered
	 */
	public int getSemester();
	
	/**
	 * Sets the semester for which the course offering was offered.
	 * @param semester
	 */
	public void setSemester(int semester);
	
	/**
	 * Returns the maximum number of student that can be enlisted in the course offering.
	 * @return the maximum number of student that can be enlisted in the course offering
	 */
	public int getStudentCount();
	
	/**
	 * Sets the maximum number of student that can be enlisted in the course offering.
	 * @param studentCount
	 */
	public void setStudentCount(int studentCount);
	
	/**
	 * Returns the schedule(day) of the laboratory class.
	 * @return the schedule(day) of the laboratory class
	 */
	public String getLaboratoryDay();
	
	/**
	 * Sets the schedule(day) of the laboratory class.
	 * @param laboratoryDay
	 */
	public void setLaboratoryDay(String laboratoryDay);
	
	/**
	 * Returns the schedule(day) of the lecture class.
	 * @return the schedule(day) of the lecture class
	 */
	public String getLectureDay();
	
	/**
	 * Sets the schedule(day) of the lecture class.
	 * @param lectureDay
	 */
	public void setLectureDay(String lectureDay);
	
	/**
	 * Returns the schedule(day) of the recitation class.
	 * @return the schedule(day) of the recitation class
	 */
	public String getRecitationDay();
	
	/**
	 * Sets the schedule(day) of the recitation class.
	 * @param recitationDay
	 */
	public void setRecitationDay(String recitationDay);
	
	/**
	 * Returns the schedule(time) of the laboratory class.
	 * @return the schedule(time) of the laboratory class
	 */
	public String getLaboratoryTime();
	
	/**
	 * Sets the schedule(time) of the laboratory class.
	 * @param laboratoryTime
	 */
	public void setLaboratoryTime(String laboratoryTime);
	
	/**
	 * Returns the schedule(time) of the lecture class.
	 * @return the schedule(time) of the lecture class
	 */
	public String getLectureTime();
	
	/**
	 * Sets the schedule(time) of the lecture class.
	 * @param lectureTime
	 */
	public void setLectureTime(String lectureTime);
	
	/**
	 * Returns the schedule(time) of the recitation class.
	 * @return the schedule(time) of the recitation class
	 */
	public String getRecitationTime();
	
	/**
	 * Sets the schedule(time) of the recitation class.
	 * @param recitationTime
	 */
	public void setRecitationTime(String recitationTime);
	
	/**
	 * Returns the room where the laboratory class will be held.
	 * @return the room where the laboratory class will be held
	 */
	public String getLaboratoryRoom();
	
	/**
	 * Sets the room where the laboratory class will be held.
	 * @param laboratoryRoom
	 */
	public void setLaboratoryRoom(String laboratoryRoom);
	
	/**
	 * Returns the room where the lecture class will be held.
	 * @return the room where the lecture class will be held
	 */
	public String getLectureRoom();
	
	/**
	 * Sets the room where the lecture class will be held.
	 * @param lectureRoom
	 */
	public void setLectureRoom(String lectureRoom);
	
	/**
	 * Returns the room where the recitation class will be held.
	 * @return the room where the recitation class will be held
	 */
	public String getRecitationRoom();
	
	/**
	 * Sets the room where the recitation class will be held.
	 * @param recitationRoom
	 */
	public void setRecitationRoom(String recitationRoom);
	
	/**
	 * Returns the list of instructor/s that will teach in the laboratory class.
	 * @return the list of instructor/s that will teach in the laboratory class
	 */
	public List<IInstructor> getLaboratoryInstructor();
	
	/**
	 * Sets the list of instructor/s that will teach in the laboratory class.
	 * @param laboratoryInstructor
	 */
	public void setLaboratoryInstructor(List<IInstructor> laboratoryInstructor);
	
	/**
	 * Returns the list of instructor/s that will teach in the lecture class.
	 * @return the list of instructor/s that will teach in the lecture class
	 */
	public List<IInstructor> getLectureInstructor();
	
	/**
	 * Sets the list of instructor/s that will teach in the lecture class.
	 * @param lectureInstructor
	 */
	public void setLectureInstructor(List<IInstructor> lectureInstructor);
	
	/**
	 * Returns the list of instructor/s that will teach in the recitation class.
	 * @return the list of instructor/s that will teach in the recitation class
	 */
	public List<IInstructor> getRecitationInstructor();
	
	/**
	 * Sets the list of instructor/s that will teach in the recitation class.
	 * @param recitationInstructor
	 */
	public void setRecitationInstructor(List<IInstructor> recitationInstructor);
	
	/**
	 * Returns true if the course offering is taught by more than 1 instructor, and false otherwise.
	 * @return true if the course offering is taught by more than 1 instructor, and false otherwise.
	 */
	public boolean isTeamTeach();
	
	/**
	 * 
	 * @param isTeamTeach
	 */
	public void setTeamTeach(boolean isTeamTeach);
	
	/**
	 * Returns the total laboratory hours per week of the laboratory class.
	 * @return the total laboratory hours per week of the laboratory class
	 */
	public int getLaboratoryHours();
	
	/**
	 * Sets the total laboratory hours per week of the laboratory class.
	 * @param laboratoryHours
	 */
	public void setLaboratoryHours(int laboratoryHours);
	
	/**
	 * Returns the total laboratory hours per week of the lecture class.
	 * @return the total laboratory hours per week of the lecture class
	 */
	public int getLectureHours();
	
	/**
	 * Sets the total lecture hours per week of the lecture class.
	 * @param lectureHours
	 */
	public void setLectureHours(int lectureHours);
	
	/**
	 * Returns the total recitation hours per week of the recitation class.
	 * @return the total recitation hours per week of the recitation class.
	 */
	public int getRecitationHours();
	
	/**
	 * Sets the total recitation hours per week of the recitation class.
	 * @param recitationHours
	 */
	public void setRecitationHours(int recitationHours);
	
}
